//696. 计数二进制子串
//思路：先统计连续的0和1分别有多少个，如：111100011000，得到4323；
//在4323中的任意相邻两个数字，取小的一个加起来，就是3+2+2 = 7

//实现：我们将连续的数字记下来，与 last 比较找出小的，累加在 sum 上，
//用上一次的个数与本次的个数做对比，找到小的累加就避免了使用数组，降低了空间复杂度,O(N) --> O(1)。
#include <string.h>
#include <math.h>
int countBinarySubstrings(char* s) {
    int len = strlen(s);
    int i = 0, sum = 0;
    int last = 0;//我们将上一次的连续数的个数用last维护

    while (i < len)
    {
        char c = s[i];
        int count = 0;//计数器每次都要更新
        while (i < len && c == s[i])
        {
            i++;
            count++;
        }
        sum += fmin(last, count);//将小的加起来
        last = count;//将本次的个数存在last里
    }
    return sum;
}